use-sync-revision-id-from-url.ts 776 B

1234567891011121314151617181920212223
  1. import { useEffect } from 'react';
  2. import { useRouter } from 'next/router';
  3. import { useSetAtom } from 'jotai';
  4. import { _atomsForSyncRevisionIdFromUrl } from '~/states/page';
  5. const { revisionIdFromUrlAtom } = _atomsForSyncRevisionIdFromUrl;
  6. /**
  7. * Sync URL query parameter (revisionId) to Jotai atom
  8. * This hook should be called in the main page component to keep the atom in sync with the URL
  9. */
  10. export const useSyncRevisionIdFromUrl = (): void => {
  11. const router = useRouter();
  12. const setRevisionIdFromUrl = useSetAtom(revisionIdFromUrlAtom);
  13. useEffect(() => {
  14. const revisionId = router.query.revisionId;
  15. setRevisionIdFromUrl(
  16. typeof revisionId === 'string' ? revisionId : undefined,
  17. );
  18. }, [router.query.revisionId, setRevisionIdFromUrl]);
  19. };